package com.dalin.framework.common.clazz;

import com.dalin.framework.common.clazz.ArgList;
import com.dalin.framework.common.utils.StringUtils;
import com.dalin.framework.common.PropertyConst;

/*****************************************************************************
 * @content: 类中方法定义类                                                                                                                    *
 * @author : 那建林                                                                                                                                 *
 * @crtDate: 2009-10-03                                                     *
 * @modDate: 2010-05-11                                                     *
 * @version: 1.11                                                           *
 ****************************************************************************/
public class Method {
	private String methodNote; // 方法注释
	private String modifier = PropertyConst.PUBLIC_STR; // 修饰符,默认为public
	private String rtnType = PropertyConst.VOID_STR; // 返回类型,默认为void
	private String methodName; // 方法名称
	private ArgList argList; // 参数列表
	private String exception; // 抛出异常类型
	private String body = ""; // 方法体, 默认为空
	
	public Method(String methodName){
		this.methodName = methodName;
	}
	
	/**
	 * 返回Class(类)中方法定义
	 */
	public String toClassMethodString() {
		StringBuffer sb = new StringBuffer();
		// 方法注释
		if (!StringUtils.isBlank(methodNote)) {
			sb.append(PropertyConst.TAB)
					.append(methodNote).append(PropertyConst.LINE_SEPARATOR);
		}
		sb.append(PropertyConst.TAB).append(modifier)
			.append(PropertyConst.SPACE).append(rtnType)
			.append(PropertyConst.SPACE).append(methodName)
			.append(PropertyConst.LEFT_PARENTHESIS);
		if (argList != null) sb.append(argList);
		sb.append(PropertyConst.RIGHT_PARENTHESIS);
		
		if (!StringUtils.isBlank(exception)) {
			sb.append(" " + PropertyConst.THROWS_STR)
				.append(PropertyConst.SPACE).append(exception);
		}
		sb.append(PropertyConst.SPACE)
			.append(PropertyConst.LEFT_BRACE)
			.append(PropertyConst.LINE_SEPARATOR);
		sb.append(body).append(PropertyConst.LINE_SEPARATOR);
		sb.append(PropertyConst.TAB)
			.append(PropertyConst.RIGHT_BRACE);	
		//方法之间空行
		sb.append(PropertyConst.LINE_SEPARATOR)
			.append(PropertyConst.LINE_SEPARATOR);
		return sb.toString();
	}

	/**
	 * 返回Interface(接口)中的方法定义；
	 */
	public String toAbstractMethodString(){
		StringBuffer sb = new StringBuffer();
		// 方法注释
		if (!StringUtils.isBlank(methodNote)) sb.append(methodNote);
		sb.append(PropertyConst.TAB).append(rtnType)
			.append(PropertyConst.SPACE).append(methodName)
			.append(PropertyConst.LEFT_PARENTHESIS);		
		if (argList != null) sb.append(argList);
		sb.append(PropertyConst.RIGHT_PARENTHESIS);
		
		if (!StringUtils.isBlank(exception)) {
			sb.append(PropertyConst.SPACE)
				.append(PropertyConst.THROWS_STR)
				.append(PropertyConst.SPACE).append(exception);
		}
		sb.append(PropertyConst.SEMICOLON)
			.append(PropertyConst.LINE_SEPARATOR)
			.append(PropertyConst.LINE_SEPARATOR);
		return sb.toString();
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
	public ArgList getArgList() {
		return argList;
	}

	public void setArgList(ArgList argList) {
		this.argList = argList;
	}
	public void setMethodNote(String methodNote) {
		this.methodNote = methodNote;
	}
	public void setModifier(String modifier) {
		this.modifier = modifier;
	}

	public String getMethodName() {
		return methodName;
	}

	public void setMethodName(String methodName) {
		this.methodName = methodName;
	}

	public String getRtnType() {
		return rtnType;
	}

	public void setRtnType(String rtnType) {
		this.rtnType = rtnType;
	}

	public String getBody() {
		return body;
	}

	public void setBody(String body) {
		this.body = body;
	}

	public String getMethodNote() {
		return methodNote;
	}

	public String getModifier() {
		return modifier;
	}


	public String getException() {
		return exception;
	}

	public void setException(String exception) {
		this.exception = exception;
	}
}
